home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 8
/
FM Towns Free Software Collection 8.iso
/
t_os
/
0rc_trn2
/
rc_main.c
< prev
next >
Wrap
Text File
|
1994-06-01
|
3KB
|
107 lines
/* game main routine */
int game_main(void)
{
int i;
char para[64];
int sr,ab,pd;
int cx,cy; /* メインキャラクタの位置 */
int cdx,cdy; /* メインキャラクタの移動量 */
int dr; /* メインキャラクタの前進(1)か行進か(-1) */
float cr; /* メインキャラクタのベクトルの長さ */
float cw; /* メインキャラクタのベクトルの角度 */
float cdw; /* メインキャラクタの角度変化量 */
float cww; /* メインキャラクタのスプライト用の補正角度 */
int spr_dr; /* メインキャラクタの方向(スプライトの向きを決める) */
cx=START_CAR_X;
cy=START_CAR_Y;
cdx=0;
cdy=0;
cr=0.0;
cw=PAI;
/* バックの初期化(page0を塗る) */
/* EGB_writePage(egb_work,0);
EGB_paintMode(egb_work,0x22);
EGB_color(egb_work,0,0x4321);
EGB_color(egb_work,2,0x4321);
WORD(para+0)= 32;
WORD(para+2)= 0;
WORD(para+4)=287;
WORD(para+6)=239;
EGB_rectangle(egb_work,para);
EGB_color(egb_work,0,BG_COLOR);
EGB_color(egb_work,2,BG_COLOR);
WORD(para+0)= 32+3;
WORD(para+2)= 0+3;
WORD(para+4)=287-3;
WORD(para+6)=239-3;
EGB_rectangle(egb_work,para);
*/
SPR_display(1,8); /* 全スプライトの表示 */
do
{
pad_read(&sr,&ab,&pd);
if(pd != 0)
{
SPR_display(2,8); /* REDY待ち */
if(pd & 0x01) /* 上が押されたら、 */
dr=1;
if(pd & 0x02) /* 下が押されたら、 */
dr=-1;
cr+=(float)dr*DR;
if(cr > SPEED_MAX)
cr=SPEED_MAX;
if(cr < -SPEED_MAX)
cr=-SPEED_MAX;
cdw=0;
if(ab & 0x02) /* Bが押されたら、 */
cdw=DW*dr;
if(ab & 0x01) /* Aが押されたら、 */
cdw=-(DW*dr);
cw+=cdw;
if(cw >= 2.0*PAI)
cw=cw-2.0*PAI;
if(cw <= -2.0*PAI)
cw=cw+2.0*PAI;
}
else
cr=0.0;
/* メインキャラクタの移動 */
cdx=(int)( cos(cw)*cr);
cdy=(int)(-sin(cw)*cr);
cx+=cdx;
cy+=cdy;
if(cx < 0 || cx > 238 || cy < 2 || cy > 226) /* 壁にぶつかったら */
{
cx-=cdx; /* 値を元に戻しておく */
cy-=cdy;
cw-=cdw;
}
for(i=0;i < 8;++i) /* 一応、全ての(自車の)スプライトを移動しておく */
SPR_setPosition(0,1023-i,1,1,cx,cy);
if(cw >= 0) /* 角度を正の数にしておく */
cww=cw;
else
cww=2*PAI+cw;
cww-=2.0*PAI/8.0/2.0; /* スプライトの向きの補正 */
if(cww >= 2.0*PAI) /* 2PAIから、はみ出さないように */
cww=cww-2.0*PAI;
if(cww <= -2.0*PAI) /* -2PAIから、はみ出さないように */
cww=cww+2.0*PAI;
spr_dr=(int)(cww*8/(2.0*PAI)); /* 角度を0~7に分ける */
for(i=0;i < 8;++i)
{
if(i == spr_dr) /* 見せるスプライト */
SPR_setAttribute(1023-i,1,1,128+4*i, 0);
else /* 見せないスプライト */
SPR_setAttribute(1023-i,1,1,128+4*i,0x2000);
}
}while(sr == 0);
SPR_display(0,8); /* スプライト消去 */
return TRUE;
}